package Class.obj.field.exer6;

import java.util.Arrays;

public class Overload {
    private int num = 0;

    // 在java里面，函数是可以重复声明的, 但是重复声明的每个函数必须要有不同的的地方，用于区分每个函数
    // 这种方法叫做重载
    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
        System.out.println("执行1个方法");
    }

    public void setNum(int num, int num2) {
        this.num = num;
        System.out.println("执行2个方法");
    }

    public void setNum(int num, int num2, int num3) {
        this.num = num;
        System.out.println("执行3个方法");
    }

    public void setNum(int num, int num2, int num3, int num4) {
        this.num = num;
        System.out.println("执行4个方法");
    }

    public void setNum(int num, int num2, int num3, int num4, int num5) {
        this.num = num;
        System.out.println("执行5个方法");
    }

    // 如果想要return
    // 重载还是很有必要的
    // 个人想象 因为java的形参必要用写类型限制，但我调用一个函数
    // 有时候传小数过去，有时候传整数过去。这个还是挺常见的，比如说价格
    // 这时候我就需要利用重载，将函数写两次，两个函数的形参不一样，一个接受整数一个接受小数
    public int setValue(int x, int y) {
        return x + y;
    }

    public double setValue(int x, double y) {
        return x + y;
    }

//    public int mOL(int a) {
//        return a * a;
//    }
//    public int mOL(int a, int b) {
//        return a * a;
//    }
//    public int mOL(int a) {
//        return a * a;
//    }

    // 当形参类型确定，但形参个数不确定的时候，可以使用可变个数形参
    // 比如说我要求n个整数的和 但这个n不确定，我无法最形参的数量进行限制
    // 所以这个时候，就可以用可变数量形参
    // 可变数量形参是数据类型是数组，他会将提交的实参都放到数组中
    public void setSum(int... nums) {
        System.out.println(Arrays.toString(nums));
        // 求和
        int zero = 0;
        for (int i = 0; i < nums.length; i++) {
            zero += nums[i];
        }
        System.out.println("总数是" + zero);
    }

    // 写一个递归
    // 在a函数中调用a函数就是递归
    // 写递归的时候必须要写阻断递归的条件，不然程序会进入死循环
    int numValue = 0;

    // public 和 private的区别
    // private代表私有的意思，用private修饰符定义的内容只能在当前类中作用
    // 跨包无法使用
    public void digui(int num) {
        numValue += num;
        System.out.println("执行了" + numValue);
        if (numValue < 5) {
            digui(1);
        }
    }
    private void gigui2(int num) {

    }

}
